#ifndef PLUGINMANAGER_H
#define PLUGINMANAGER_H

#include "PluginInterface.h"
#include <QObject>
#include <QPluginLoader>
#include <QVariant>

class PluginManager : public QObject
{
    Q_OBJECT
public:
    explicit PluginManager(QObject *parent = nullptr);
    ~PluginManager();

    static PluginManager *instance(){
            if(m_instance==nullptr)
                m_instance=new PluginManager();
            return m_instance;
         }

       //扫描JSON文件中的插件元数据
       void scanMetaData(const QString &filepath);

        //加载所有插件
        void loadAllPlugins();

        //加载其中某个插件
        void loadPlugin(const QString &filepath);

        //卸载所有插件
        void unloadAllPlugins();

        //卸载某个插件
        void unloadPlugin(const QString &filepath);

        //获取所有插件名称
        QList<QVariant> allPluginsName();

        //获取所有插件
        QList<QPluginLoader *> allPlugins();

        //获取某个插件名称
        QVariant getPluginName(QPluginLoader *loader);

        //根据名称获得插件
        QPluginLoader* getPlugin(const QString &name);

   public slots:
        void recMsgFromPlugin(PluginMetaData);


   private:
        static PluginManager *m_instance;

        class PluginsManagerPrivate;
        PluginsManagerPrivate *managerPrivate;
};

#endif // PLUGINMANAGER_H
